import axios from 'axios'
import toast from 'react-hot-toast';

axios.defaults.baseURL = 'http://localhost:3000'
// 告诉浏览器，如果发送的是 post请求，那么后端一定会返回 json 格式的数据，让浏览器以解析 json 的方式来解析响应提体
axios.defaults.headers.post['Content-Type'] = 'application/json'

// 请求拦截器 -- 所有的请求都会被这个函数拦截下来
axios.interceptors.request.use(request => {
  // 1. 从本地存储中获取令牌
  const token = localStorage.getItem('access_token')
  // 2. 如果令牌存在，就将令牌添加到请求头中
  if (token) {
    request.headers.Authorization = token
  }
  return request  // 请求放行
})

// 响应拦截器
axios.interceptors.response.use(
  response => {  //  http 的状态码为200时才走进第一个回调
    if (response.status === 200) {
      if (response.data.code !== '1') {  //  逻辑性错误
        toast.error(response.data.msg);
        return Promise.reject(response)
      }

      // return response.data
      return Promise.resolve(response.data)
    }
  },
  (res) => {
    if (res.status === 401) {
      // toast.error(res.response.data.msg)
      // setTimeout(() => {
      //   window.location.href = '/login'
      // }, 1500)
      const originalRequest = res.config
      //  重新请求新的 短Token和 长token
      const refresh_token = localStorage.getItem('refresh_token')
      if (refresh_token) {
        axios.post('/user/refresh', {
          refresh_token: refresh_token
        }).then(res => {
          console.log(res);
          if (res.code === '1') {
            localStorage.setItem('access_token', res.access_token)
            localStorage.setItem('refresh_token', res.refresh_token)
            //  重新请求
            originalRequest.headers.Authorization = res.access_token
            return axios(originalRequest)
          }
        })
      }
    }
    if (res.status === 416) {  // 长token 也失效了
      toast.error(res.response.data.msg)
      setTimeout(() => {
        window.location.href = '/login'
      }, 1500)
    }
  }

)



export default axios